---
title: 软件工程概述
description: 把软件当成工程来管理
sidebar_position: 1
---

# 软件工程概述

## 软件开发生命周期

### 1. 软件定义时期
包括<RedSpan>可行性研究和详细需求分析过程</RedSpan>，任务是确定软件开发工程必须完成的总目标，具体可分成<RedSpan>问题定义、可行性研究、需求分析等</RedSpan>。

### 2. 软件开发时期
就是软件的<RedSpan>设计与实现</RedSpan>，可分成概要设计、详细设计、编码、测试等。

### 3. 软件运行和维护
就是把<RedSpan>软件产品移交给用户使用</RedSpan>。

## 软件系统的文档

软件系统的文档可以分为<RedSpan>用户文档和系统文档</RedSpan>两类：
- **用户文档**：主要描述<RedSpan>系统功能和使用方法</RedSpan>，并不关心这些功能是怎样实现的；
- **系统文档**：描述<RedSpan>系统设计、实现和测试等各方面的内容</RedSpan>。

## 软件工程过程
软件过程是指完成软件产品生产的一组相互关联的活动。有许多不同类型的软件系统，没有适用于所有类型系统的软件工程方法。因此，也没有适用于所有类型系统的软件过程。不同企业使用的过程取决于所开发的软件的类型、软件客户的需求以及开发软件的人的技能。

虽然有许多不同的软件过程，但它们都必须以某种形式包含以下四个活动：

1. **P (Plan)——<RedSpan>软件规格说明</RedSpan>**：规定软件的功能及其运行时的限制。
2. **D (Do)——<RedSpan>软件开发</RedSpan>**：开发出满足规格说明的软件。
3. **C (Check)——<RedSpan>软件确认</RedSpan>**：确认开发的软件能够满足用户的需求。
4. **A (Action)——<RedSpan>软件演进</RedSpan>**：软件在运行过程中不断改进以满足客户新的需求。

这些活动本身也是复杂的活动，还会包含一些复杂的子活动，例如需求确认、体系结构设计、单元测试等。软件过程还包括其它一些活动，例如软件配置管理、项目计划等支持软件生产的活动。
## 软件系统工具

<RedSpan>软件系统工具</RedSpan>通常可以按软件过程活动将软件工具分为：

- **<RedSpan>软件开发工具</RedSpan>**：需求分析工具、设计工具、编码与排错工具、测试工具等。
- **<RedSpan>软件维护工具</RedSpan>**：版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
- **<RedSpan>软件管理和软件支持工具</RedSpan>**：项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。


## 软件设计

软件设计四个活动：<RedSpan>数据设计、架构（体系结构）设计、人机界面（接口）设计和过程(功能)设计</RedSpan>。

